/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.sadhar.sipp.perekamananggarankegiatanunit;

import java.util.List;
import org.sadhar.errhandler.ClassAntiNull;
import org.sadhar.sia.common.ClassSession;
import org.sadhar.sia.framework.ClassApplicationModule;
import org.sadhar.sipp.barang.Barang;
import org.sadhar.sipp.barang.BarangDAO;
import org.sadhar.sipp.barang.BarangDAOImpl;
import org.sadhar.sipp.itembiaya.ItemBiaya;
import org.sadhar.sipp.itembiaya.ItemBiayaDAO;
import org.sadhar.sipp.itembiaya.ItemBiayaDAOImpl;
import org.sadhar.sipp.posbiaya.PosBiaya;
import org.sadhar.sipp.posbiaya.PosBiayaDAO;
import org.sadhar.sipp.posbiaya.PosBiayaDAOImpl;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Button;
import org.zkoss.zul.Doublebox;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Label;
import org.zkoss.zul.Listbox;
import org.zkoss.zul.Listcell;
import org.zkoss.zul.Listitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Radio;
import org.zkoss.zul.Space;
import org.zkoss.zul.Tab;
import org.zkoss.zul.Tabbox;
import org.zkoss.zul.Tabpanel;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Toolbarbutton;
import org.zkoss.zul.Window;

/**
 *
 * @author hendro
 */
public class PerekamanAnggaranKegiatanUnitWnd extends ClassApplicationModule {

    private Label lblTahunAnggaran;
    private Radio rdAwal;
    private Radio rdRevisi;
    private Textbox txtboxTotalPlafon;
    private Textbox txtboxSisaPlafon;
    private Listbox lstboxDaftarKegiatan;
    private Label lblKelompokKegiatan;
    private Label lblNamaKegiatan;
    private Label lblKeterangan;
    private Label lblJenisKegiatan;
    private Label lblNomorIndikator;
    private Textbox txtboxCariPosBiaya;
    private Button btnCariPosBiaya;
    private Label lblPosBiaya;
    private Textbox txtboxCariJenis;
    private Button btnCariJenis;
    private Textbox txtboxCariItemBiaya;
    private Button btnCariItemBiaya;
    private Label lblItemBiaya;
    private Doublebox txtboxHarga;
    private Label lblSatuan;
    private Label lblTotalBiaya;
    private Intbox txtboxKuantitas;
    private Intbox txtboxJumlahHari;
    private Button btnSimpan;
    private Button btnBatal;
    private Listbox lstboxDafarDetailKegiatan;
    private Textbox txtboxJumlahAnggaran;
    private Listbox lstboxAnggaranBiayaKegiatanRevisi;
    private Listbox lstboxAnggaranBiayaKegiatanAwal;
    private Textbox txtboxTotalAnggaranAwal;
    private Textbox txtboxTotalAnggaranRevisi;
    private Button btnKirim;
    private Textbox txtboxKodePosBiaya;
    private Button btnCariBarang;
    private Textbox txtboxIdJenisBarang;
    private Textbox txtboxKodeRapatKerjaSubKegiatan;
    private Textbox txtboxKodeItemBiayaOrIdHargaBarang;
    private Textbox txtboxAnggaranBiayaRapatKerjaDanKegiatan;
    private Tab tRevisi;
    private Tabpanel tabAwal;
    private Tabpanel tabRevisi;
    private Tabbox tabboxAnggaranBiaya;
    private ClassSession sesi;
    private PerekamanAnggaranKegiatanUnitDAO kegiatanDAO;

    public PerekamanAnggaranKegiatanUnitWnd() {
        this.sesi = new ClassSession("2009", "04000000");
        this.kegiatanDAO = new PerekamanAnggaranKegiatanUnitDAOImpl();
    }

    public void onCreate() throws Exception {
        lblTahunAnggaran = (Label) getFellow("lblTahunAnggaran");
        rdAwal = (Radio) getFellow("rdAwal");
        rdRevisi = (Radio) getFellow("rdRevisi");
        txtboxTotalPlafon = (Textbox) getFellow("txtboxTotalPlafon");
        txtboxSisaPlafon = (Textbox) getFellow("txtboxSisaPlafon");
        lstboxDaftarKegiatan = (Listbox) getFellow("lstboxDaftarKegiatan");
        lblKelompokKegiatan = (Label) getFellow("lblKelompokKegiatan");
        lblNamaKegiatan = (Label) getFellow("lblNamaKegiatan");
        lblKeterangan = (Label) getFellow("lblKeterangan");
        lblJenisKegiatan = (Label) getFellow("lblJenisKegiatan");
        lblNomorIndikator = (Label) getFellow("lblNomorIndikator");
        txtboxCariPosBiaya = (Textbox) getFellow("txtboxCariPosBiaya");
        btnCariPosBiaya = (Button) getFellow("btnCariPosBiaya");
        lblPosBiaya = (Label) getFellow("lblPosBiaya");
        txtboxCariJenis = (Textbox) getFellow("txtboxCariJenis");
        btnCariJenis = (Button) getFellow("btnCariJenis");
        txtboxCariItemBiaya = (Textbox) getFellow("txtboxCariItemBiaya");
        btnCariItemBiaya = (Button) getFellow("btnCariItemBiaya");
        lblItemBiaya = (Label) getFellow("lblItemBiaya");
        txtboxHarga = (Doublebox) getFellow("txtboxHarga");
        lblSatuan = (Label) getFellow("lblSatuan");
        lblTotalBiaya = (Label) getFellow("lblTotalBiaya");
        txtboxKuantitas = (Intbox) getFellow("txtboxKuantitas");
        txtboxJumlahHari = (Intbox) getFellow("txtboxJumlahHari");
        btnSimpan = (Button) getFellow("btnSimpan");
        btnBatal = (Button) getFellow("btnBatal");
        lstboxDafarDetailKegiatan = (Listbox) getFellow("lstboxDafarDetailKegiatan");
        txtboxJumlahAnggaran = (Textbox) getFellow("txtboxJumlahAnggaran");
        lstboxAnggaranBiayaKegiatanAwal = (Listbox) getFellow("lstboxAnggaranBiayaKegiatanAwal");
        lstboxAnggaranBiayaKegiatanRevisi = (Listbox) getFellow("lstboxAnggaranBiayaKegiatanRevisi");
        txtboxTotalAnggaranRevisi = (Textbox) getFellow("txtboxTotalAnggaranRevisi");
        txtboxTotalAnggaranAwal = (Textbox) getFellow("txtboxTotalAnggaranAwal");
        btnKirim = (Button) getFellow("btnKirim");
        txtboxKodePosBiaya = (Textbox) getFellow("txtboxKodePosBiaya");
        btnCariBarang = (Button) getFellow("btnCariBarang");
        txtboxIdJenisBarang = (Textbox) getFellow("txtboxIdJenisBarang");
        txtboxKodeRapatKerjaSubKegiatan = (Textbox) getFellow("txtboxKodeRapatKerjaSubKegiatan");
        txtboxKodeItemBiayaOrIdHargaBarang = (Textbox) getFellow("txtboxKodeItemBiayaOrIdHargaBarang");
        lblTahunAnggaran.setValue(sesi.getThnAnggaran());
        txtboxAnggaranBiayaRapatKerjaDanKegiatan = (Textbox) getFellow("txtboxAnggaranBiayaRapatKerjaDanKegiatan");
        tabAwal = (Tabpanel) getFellow("tabAwal");
        tabRevisi = (Tabpanel) getFellow("tabRevisi");
        tabboxAnggaranBiaya = (Tabbox) getFellow("tabboxAnggaranBiaya");
        tRevisi = (Tab) getFellow("tRevisi");
        setRadioStatus();
        txtboxTotalPlafon.setValue(ClassAntiNull.AntiNullDoubleCurrency(kegiatanDAO.getTotalPlafon(sesi.getKodeUnit(), sesi.getThnAnggaran())));
        setSisaPlafon();
        loadKegiatan();
        loadAnggaranBiayaKegiatanRevisi();
        loadAnggaranBiayaKegiatanAwal();
        isDikunci();
        setActivePanel();

        txtboxJumlahAnggaran.setDisabled(true);
        txtboxTotalAnggaranAwal.setDisabled(true);
        txtboxTotalAnggaranRevisi.setDisabled(true);
    }

    private void setActivePanel() throws Exception {
        if (rdAwal.isChecked()) {
            tabboxAnggaranBiaya.setSelectedPanel(tabAwal);
            tRevisi.setVisible(false);
        } else if (rdRevisi.isChecked()) {
            tabboxAnggaranBiaya.setSelectedPanel(tabRevisi);
            tRevisi.setVisible(true);
        }
    }

    public void isDikunci() throws Exception {
        String isRevisi = "N";
        if (rdAwal.isChecked()) {
            isRevisi = "N";
        } else {
            isRevisi = "Y";
        }
        //System.out.println(isRevisi);
        if (kegiatanDAO.selectIsDikunci(sesi.getThnAnggaran(), sesi.getKodeUnit(), isRevisi).equalsIgnoreCase("Y")) {
            btnSimpan.setDisabled(true);
            btnKirim.setDisabled(true);
        } else {
            btnSimpan.setDisabled(false);
            btnKirim.setDisabled(false);
        }
        setActivePanel();
    //loadAnggaranBiayaRapaKerjaDanKegiatan();
    }

    private void setRadioStatus() throws Exception {
        List<Status> listStatus = kegiatanDAO.getStatus(sesi.getThnAnggaran(), sesi.getKodeUnit());
        if (listStatus.size() <= 0) {
            rdAwal.setChecked(true);
            rdRevisi.setChecked(false);
        } else {
            boolean isAwal = false;
            for (Status s : listStatus) {
                if (s.getIsRevisi().equalsIgnoreCase("N") && s.getIsDiajukan().equalsIgnoreCase("N")) {
                    isAwal = true;
                } else if (s.getIsRevisi().equalsIgnoreCase("N") && s.getIsDiajukan().equalsIgnoreCase("Y")) {
                    isAwal = false;
                    break;
                }
            }
            if (isAwal) {
                rdAwal.setChecked(true);
                rdRevisi.setChecked(false);
            } else {
                rdAwal.setChecked(false);
                rdRevisi.setChecked(true);
            }
        }
    }
    private double sisaPlafon = 0;

    private void setSisaPlafon() throws Exception {
        List<Status> listStatus = kegiatanDAO.getStatus(sesi.getThnAnggaran(), sesi.getKodeUnit());
        // revisied sarah (BAPSI), 21-12-2009
        if (listStatus.size() >= 0) {
//            boolean isRevisi = false;
//            boolean isDiajukan = false;
//            //String sql = "";
            double totalAnggaranKegiatan = 0;
            /*for (Status s : listStatus) {
            if (s.getIsRevisi().equalsIgnoreCase("Y") && s.getIsDiajukan().equalsIgnoreCase("Y")) {
            totalAnggaranKegiatan = kegiatanDAO.getTotalAnggaranKegiatan(sesi.getKodeUnit(), sesi.getThnAnggaran(), "Y", "Y");
            break;
            } else if (s.getIsRevisi().equalsIgnoreCase("Y") && s.getIsDiajukan().equalsIgnoreCase("N")) {
            totalAnggaranKegiatan = kegiatanDAO.getTotalAnggaranKegiatan(sesi.getKodeUnit(), sesi.getThnAnggaran(), "Y", "N");
            break;
            } else if (s.getIsRevisi().equalsIgnoreCase("N") && s.getIsDiajukan().equalsIgnoreCase("Y")) {
            totalAnggaranKegiatan = kegiatanDAO.getTotalAnggaranKegiatan(sesi.getKodeUnit(), sesi.getThnAnggaran(), "N", "Y");
            break;
            } else if (s.getIsRevisi().equalsIgnoreCase("N") && s.getIsDiajukan().equalsIgnoreCase("N")) {
            totalAnggaranKegiatan = kegiatanDAO.getTotalAnggaranKegiatan(sesi.getKodeUnit(), sesi.getThnAnggaran(), "N", "N");
            break;
            }
            }*/
            List<Status> listStatus1 = kegiatanDAO.getStatus2(sesi.getThnAnggaran(), sesi.getKodeUnit(), "Y", "Y");
            if (listStatus1.size() > 0) {
                totalAnggaranKegiatan = kegiatanDAO.getTotalAnggaranKegiatan(sesi.getKodeUnit(), sesi.getThnAnggaran(), "Y", "Y");
            } else {
                List<Status> listStatus2 = kegiatanDAO.getStatus2(sesi.getThnAnggaran(), sesi.getKodeUnit(), "Y", "N");
                if (listStatus2.size() > 0) {
                    totalAnggaranKegiatan = kegiatanDAO.getTotalAnggaranKegiatan(sesi.getKodeUnit(), sesi.getThnAnggaran(), "Y", "N");
                } else {
                    List<Status> listStatus3 = kegiatanDAO.getStatus2(sesi.getThnAnggaran(), sesi.getKodeUnit(), "N", "Y");
                    if (listStatus3.size() > 0) {
                        totalAnggaranKegiatan = kegiatanDAO.getTotalAnggaranKegiatan(sesi.getKodeUnit(), sesi.getThnAnggaran(), "N", "Y");
                    } else {
                        List<Status> listStatus4 = kegiatanDAO.getStatus2(sesi.getThnAnggaran(), sesi.getKodeUnit(), "N", "N");
                        if (listStatus4.size() > 0) {
                            totalAnggaranKegiatan = kegiatanDAO.getTotalAnggaranKegiatan(sesi.getKodeUnit(), sesi.getThnAnggaran(), "N", "N");
                        } else {
                            totalAnggaranKegiatan = 0;
                        }
                    }
                }
            }
//            if (isRevisi == false && isDiajukan == false) {
//                totalAnggaranKegiatan = kegiatanDAO.getTotalAnggaranKegiatan(sesi.getKodeUnit(), sesi.getThnAnggaran(), "N", "N");
//            }
            double totalPlafon = ClassAntiNull.AntiNullDouble(kegiatanDAO.getTotalPlafon(sesi.getKodeUnit(), sesi.getThnAnggaran()));
            sisaPlafon = totalPlafon - totalAnggaranKegiatan;
            txtboxSisaPlafon.setValue(ClassAntiNull.AntiNullDoubleCurrency(sisaPlafon));
        } else {
            sisaPlafon = 0;
            txtboxSisaPlafon.setValue("0");
        }
    }

    private void loadKegiatan() throws Exception {
        lstboxDaftarKegiatan.getItems().clear();
        int no = 1;
        for (Kegiatan k : kegiatanDAO.listKegiatan(sesi.getThnAnggaran(), sesi.getKodeUnit())) {
            Listitem item = new Listitem();
            item.setValue(k);
            item.appendChild(new Listcell(String.valueOf(no++)));
            item.appendChild(new Listcell(k.getKelompokKegiatan()));
            item.appendChild(new Listcell(k.getNamaSubKegiatan()));
            item.appendChild(new Listcell(k.getJenisKegiatan()));
            lstboxDaftarKegiatan.appendChild(item);
        }
//        if (lstboxDaftarKegiatan.getItems().size() > 0) {
//            lstboxDaftarKegiatan.setSelectedIndex(0);
//        }
    }

    private void loadAnggaranBiayaKegiatanAwal() throws Exception {
        lstboxAnggaranBiayaKegiatanAwal.getItems().clear();
        double totalAnggaran = 0;
        for (AnggaranBiayaRapatKerjaDanKegiatan obj : kegiatanDAO.listAllAnggaranBiayaRapatKerjaDanKegiatan(sesi.getThnAnggaran(), sesi.getKodeUnit(), "N")) {
            Listitem item = new Listitem();
            item.setValue(obj);
            item.appendChild(new Listcell(obj.getKelompokKegiatan()));
            item.appendChild(new Listcell(obj.getNamaKegiatan()));
            PosBiaya pb = posDAO.select(obj.getKodePosBiaya());
            item.appendChild(new Listcell(pb.getNamaPosBiaya()));
            if (pb.getNamaTableItem().equalsIgnoreCase("barang")) {
                Barang brg = brgDAO.select(obj.getKodeItemBiayaBarang());
                item.appendChild(new Listcell(brg.getNamaBarang()));
            } else if (pb.getNamaTableItem().equalsIgnoreCase("itemBiaya")) {
                ItemBiaya itemBiaya = itemDAO.select(obj.getKodeItemBiayaBarang());
                item.appendChild(new Listcell(itemBiaya.getNamaItem()));
            }
            item.appendChild(new Listcell(obj.getHarga() + ""));
            item.appendChild(new Listcell(obj.getKuantitas() + ""));
            item.appendChild(new Listcell(obj.getJumlahHari() + ""));
            double total = 0;
            if (obj.getJumlahHari() > 0) {
                total = obj.getHarga() * obj.getKuantitas() * obj.getJumlahHari();
            } else {
                total = obj.getHarga() * obj.getKuantitas();
            }
            totalAnggaran += total;
            txtboxTotalAnggaranAwal.setValue(ClassAntiNull.AntiNullDoubleString(totalAnggaran));
            item.appendChild(new Listcell(total + ""));
            lstboxAnggaranBiayaKegiatanAwal.appendChild(item);
        }
    }

    private void loadAnggaranBiayaKegiatanRevisi() throws Exception {
        lstboxAnggaranBiayaKegiatanRevisi.getItems().clear();
        double totalAnggaran = 0;
        for (AnggaranBiayaRapatKerjaDanKegiatan obj : kegiatanDAO.listAllAnggaranBiayaRapatKerjaDanKegiatan(sesi.getThnAnggaran(), sesi.getKodeUnit(), "Y")) {
            Listitem item = new Listitem();
            item.setValue(obj);
            item.appendChild(new Listcell(obj.getKelompokKegiatan()));
            item.appendChild(new Listcell(obj.getNamaKegiatan()));
            PosBiaya pb = posDAO.select(obj.getKodePosBiaya());
            item.appendChild(new Listcell(pb.getNamaPosBiaya()));
            if (pb.getNamaTableItem().equalsIgnoreCase("barang")) {
                Barang brg = brgDAO.select(obj.getKodeItemBiayaBarang());
                item.appendChild(new Listcell(brg.getNamaBarang()));
            } else if (pb.getNamaTableItem().equalsIgnoreCase("itemBiaya")) {
                ItemBiaya itemBiaya = itemDAO.select(obj.getKodeItemBiayaBarang());
                item.appendChild(new Listcell(itemBiaya.getNamaItem()));
            }
            item.appendChild(new Listcell(obj.getHarga() + ""));
            item.appendChild(new Listcell(obj.getKuantitas() + ""));
            item.appendChild(new Listcell(obj.getJumlahHari() + ""));
            double total = 0;
            if (obj.getJumlahHari() > 0) {
                total = obj.getHarga() * obj.getKuantitas() * obj.getJumlahHari();
            } else {
                total = obj.getHarga() * obj.getKuantitas();
            }
            totalAnggaran += total;
            txtboxTotalAnggaranRevisi.setValue(ClassAntiNull.AntiNullDoubleString(totalAnggaran));
            item.appendChild(new Listcell(total + ""));
            lstboxAnggaranBiayaKegiatanRevisi.appendChild(item);
        }
    }

    public void lstboxDaftarKegiatanOnSelect() throws Exception {
        Kegiatan k = (Kegiatan) lstboxDaftarKegiatan.getSelectedItem().getValue();
        lblKelompokKegiatan.setValue(k.getKelompokKegiatan());
        lblNamaKegiatan.setValue(k.getNamaSubKegiatan());
        lblKeterangan.setValue(k.getKeterangan());
        lblJenisKegiatan.setValue(k.getJenisKegiatan());
        lblNomorIndikator.setValue(k.getNoIndikator());
        txtboxKodeRapatKerjaSubKegiatan.setValue(k.getKodeKegiatanUnit() + "");
        loadAnggaranBiayaRapaKerjaDanKegiatan();
        txtboxCariPosBiaya.setValue("");
        txtboxKodePosBiaya.setValue("");
        lblPosBiaya.setValue("......................");
        txtboxCariJenis.setValue("");
        txtboxIdJenisBarang.setValue("");
        txtboxCariItemBiaya.setValue("");
        txtboxKodeItemBiayaOrIdHargaBarang.setValue("");
        lblItemBiaya.setValue("......................");
        txtboxHarga.setValue(0);
        lblSatuan.setValue("......................");
        lblTotalBiaya.setValue("......................");
        txtboxKuantitas.setValue(0);
        txtboxJumlahHari.setValue(0);
    }

    public void btnCariPosBiayaOnClick() throws Exception {
        if (lstboxDaftarKegiatan.getSelectedItem() == null) {
            Messagebox.show("Silahakan pilih Kegiatan", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            return;
        }
        final Window win = (Window) Executions.createComponents("/sippzul/perekamananggarankegiatanunit/PosBiayaPopup.zul", this, null);
        Textbox txtboxKeySearch = (Textbox) win.getFellow("txtboxKeySearch");
        Textbox txtboxKodeKelompokKegiatan = (Textbox) win.getFellow("txtboxKodeKelompokKegiatan");
        Textbox txtboxTahunAnggaran = (Textbox) win.getFellow("txtboxTahunAnggaran");

        txtboxKeySearch.setValue(txtboxCariPosBiaya.getValue());
        Kegiatan k = (Kegiatan) lstboxDaftarKegiatan.getSelectedItem().getValue();
        if (k == null) {
            Messagebox.show("Silahakan Pilih salah satu Kelompok Kegiatan", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            return;
        }
        txtboxKodeKelompokKegiatan.setValue(k.getKodeKelompokKegiatan() + "");
        txtboxTahunAnggaran.setValue(sesi.getThnAnggaran());
        win.doModal();
    }

    public void btnCariItemBiayaOnClick() throws Exception {
        lblItemBiaya.setValue("............................");
        lblSatuan.setValue("........................");
        txtboxHarga.setValue(0);
        txtboxKuantitas.setValue(0);
        txtboxJumlahHari.setValue(0);
        lblTotalBiaya.setValue(".......................");
        if (txtboxKodePosBiaya.getValue().isEmpty()) {
            Messagebox.show("Silahkan Pilih Pos Biaya");
            return;
        }
        final Window win = (Window) Executions.createComponents("/sippzul/itembiaya/ItemBiayaPopup.zul", this, null);
        Textbox txtboxKeySearch = (Textbox) win.getFellow("txtboxKeySearch");
        Textbox txtboxKodePosBiayax = (Textbox) win.getFellow("txtboxKodePosBiaya");
        txtboxKeySearch.setValue(txtboxCariItemBiaya.getValue());
        txtboxKodePosBiayax.setValue(this.txtboxKodePosBiaya.getValue());
        win.doModal();

    }

    public void btnCariBarangOnClick() throws Exception {
        lblItemBiaya.setValue("............................");
        lblSatuan.setValue("........................");
        txtboxHarga.setValue(0);
        txtboxKuantitas.setValue(0);
        txtboxJumlahHari.setValue(0);
        lblTotalBiaya.setValue(".......................");
        if (txtboxIdJenisBarang.getValue().isEmpty()) {
            Messagebox.show("Silahkan Pilih Jenis Barang");
            return;
        }
        final Window win = (Window) Executions.createComponents("/sippzul/barang/BarangPopup.zul", this, null);
        Textbox txtboxKeySearch = (Textbox) win.getFellow("txtboxKeySearch");
        Textbox txtboxIdJenisBarangx = (Textbox) win.getFellow("txtboxIdJenisBarang");
        Textbox txtboxTahunAnggaran = (Textbox) win.getFellow("txtboxTahunAnggaran");
        txtboxKeySearch.setValue(txtboxCariItemBiaya.getValue());
        txtboxIdJenisBarangx.setValue(txtboxIdJenisBarang.getValue());
        txtboxTahunAnggaran.setValue(sesi.getThnAnggaran());
        win.doModal();
    }

    public void btnCariJenisOnClick() throws Exception {
        if (txtboxKodePosBiaya.getValue().isEmpty()) {
            Messagebox.show("Silahkan Pilih Pos Biaya");
            return;
        }
        final Window win = (Window) Executions.createComponents("/sippzul/jenisbarang/JenisBarangPopup.zul", this, null);
        Textbox txtboxKeySearch = (Textbox) win.getFellow("txtboxKeySearch");
        Textbox txtboxKodeKlasifikasi = (Textbox) win.getFellow("txtboxKodeKlasifikasi");
        txtboxKeySearch.setValue(txtboxCariJenis.getValue());

        if (txtboxKodePosBiaya.getValue().equalsIgnoreCase("1")) {
            txtboxKodeKlasifikasi.setValue("1");
        } else if (txtboxKodePosBiaya.getValue().equalsIgnoreCase("3")) {
            txtboxKodeKlasifikasi.setValue("3");
        } else if (txtboxKodePosBiaya.getValue().equalsIgnoreCase("4")) {
            txtboxKodeKlasifikasi.setValue("4");
        }
        win.doModal();
    }

    public void txtboxJumlahHariOnChange() throws Exception {
        hitungTotalBiaya();
    }

    public void txtboxKuantitasOnChange() throws Exception {
        hitungTotalBiaya();
    }

    public void hitungTotalBiaya() throws Exception {
        double total = 0;
        if (ClassAntiNull.AntiNullInt(txtboxJumlahHari.getValue()) > 0) {
            total = ClassAntiNull.AntiNullDouble(txtboxHarga.getValue()) * ClassAntiNull.AntiNullInt(txtboxKuantitas.getValue()) * ClassAntiNull.AntiNullInt(txtboxJumlahHari.getValue());
            lblTotalBiaya.setValue(ClassAntiNull.AntiNullDoubleCurrency(total));
        } else {
            total = ClassAntiNull.AntiNullDouble(txtboxHarga.getValue()) * ClassAntiNull.AntiNullInt(txtboxKuantitas.getValue());
            lblTotalBiaya.setValue(ClassAntiNull.AntiNullDoubleCurrency(total));
        }
    }

    public void btnSimpanOnClick() throws Exception {
        if (txtboxKodeRapatKerjaSubKegiatan.getValue().isEmpty()) {
            Messagebox.show("Silihan Pilih Kegiatan", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            return;
        }
        if (txtboxKodePosBiaya.getValue().isEmpty()) {
            Messagebox.show("Silihan Pilih Pos Biaya", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            return;
        }
        if (txtboxKodeItemBiayaOrIdHargaBarang.getValue().isEmpty()) {
            Messagebox.show("Silihan Pilih Item Biaya/Barang", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            return;
        }
        if (txtboxHarga.getValue().isNaN()) {
            Messagebox.show("Silihan Input Harga", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            return;
        }
        double total = 0;
        if (ClassAntiNull.AntiNullInt(txtboxJumlahHari.getValue()) > 0) {
            total = ClassAntiNull.AntiNullDouble(txtboxHarga.getValue()) * ClassAntiNull.AntiNullInt(txtboxKuantitas.getValue()) * ClassAntiNull.AntiNullInt(txtboxJumlahHari.getValue());
            lblTotalBiaya.setValue(ClassAntiNull.AntiNullDoubleCurrency(total));
        } else {
            total = ClassAntiNull.AntiNullDouble(txtboxHarga.getValue()) * ClassAntiNull.AntiNullInt(txtboxKuantitas.getValue());
            lblTotalBiaya.setValue(ClassAntiNull.AntiNullDoubleCurrency(total));
        }
        if (total <= 0) {
            Messagebox.show("Data tidak dapat disimpan karena Total Biaya<=0", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            return;
        }
        if (sisaPlafon - total < 0) {
            Messagebox.show("Data tidak dapat disimpan karena melebihi Plafon", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            return;
        }
        AnggaranBiayaRapatKerjaDanKegiatan obj = new AnggaranBiayaRapatKerjaDanKegiatan();
        obj.setTahun(sesi.getThnAnggaran());
        obj.setKodeRapatKerjaSubKegiatan(Integer.valueOf(txtboxKodeRapatKerjaSubKegiatan.getValue()));
        obj.setKodePosBiaya(Integer.valueOf(txtboxKodePosBiaya.getValue()));
        obj.setKodeItemBiayaBarang(Integer.valueOf(txtboxKodeItemBiayaOrIdHargaBarang.getValue()));
        obj.setHarga(ClassAntiNull.AntiNullFloat(txtboxHarga.getValue()));
        obj.setKuantitas(ClassAntiNull.AntiNullFloat(txtboxKuantitas.getValue()));
        obj.setJumlahHari(ClassAntiNull.AntiNullFloat(txtboxJumlahHari.getValue()));
        obj.setIsRapat("N");
        if (rdAwal.isChecked()) {
            obj.setIsRevisi("N");
        } else if (rdRevisi.isChecked()) {
            obj.setIsRevisi("Y");
        }
        if (txtboxAnggaranBiayaRapatKerjaDanKegiatan.getValue().isEmpty()) { //insert
            if (kegiatanDAO.selectAnggaranBiayaRapatKerjaDanKegiatan(obj.getTahun(), obj.getKodeRapatKerjaSubKegiatan(), obj.getKodePosBiaya(), obj.getKodeItemBiayaBarang(), obj.getIsRevisi(), obj.getIsRapat()).size() <= 0) {
                obj.setIsSudahDiajukan("N");
                kegiatanDAO.insert(obj);
            } else {
                Messagebox.show("Gagal menyimpan data: Duplikasi data tidak diizinkan", "Pesan Informasi", Messagebox.OK, Messagebox.EXCLAMATION);
                return;
            }
        } else {//update
            obj.setId(Integer.valueOf(txtboxAnggaranBiayaRapatKerjaDanKegiatan.getValue()));
            kegiatanDAO.update(obj);
        }
        clearComponen();
        loadAnggaranBiayaRapaKerjaDanKegiatan();
        loadAnggaranBiayaKegiatanAwal();
        loadAnggaranBiayaKegiatanRevisi();
        setActivePanel();
        setDisableComponen(false);
    }

    public void btnBatalOnClick() throws Exception {
        clearComponen();
        setDisableComponen(false);
    }

    private void clearComponen() throws Exception {
//        lblKelompokKegiatan.setValue("......................");
//        lblNamaKegiatan.setValue("......................");
//        lblKeterangan.setValue("......................");
//        lblJenisKegiatan.setValue("......................");
//        lblNomorIndikator.setValue("......................");
        // txtboxKodeRapatKerjaSubKegiatan.setValue("");
        // txtboxKodePosBiaya.setValue("");
        txtboxAnggaranBiayaRapatKerjaDanKegiatan.setValue("");  // reset status insert or update
        txtboxKodeItemBiayaOrIdHargaBarang.setValue("");
        txtboxHarga.setValue(0);
        txtboxCariJenis.setValue("");
        txtboxIdJenisBarang.setValue("");
        txtboxCariItemBiaya.setValue("");
        lblItemBiaya.setValue("......................");
        lblTotalBiaya.setValue("......................");
        //lblPosBiaya.setValue("......................");
        txtboxKuantitas.setValue(0);
        txtboxJumlahHari.setValue(0);
        setRadioStatus();
        txtboxTotalPlafon.setValue(ClassAntiNull.AntiNullDoubleCurrency(kegiatanDAO.getTotalPlafon(sesi.getKodeUnit(), sesi.getThnAnggaran())));
        setSisaPlafon();
    //loadKegiatan();
    }

    public void lstboxDafarDetailKegiatanOnSelect() throws Exception {
        AnggaranBiayaRapatKerjaDanKegiatan obj = (AnggaranBiayaRapatKerjaDanKegiatan) lstboxDafarDetailKegiatan.getSelectedItem().getValue();
        txtboxAnggaranBiayaRapatKerjaDanKegiatan.setValue(obj.getId() + "");
        txtboxKodePosBiaya.setValue(obj.getKodePosBiaya() + "");
        PosBiaya pb = posDAO.select(obj.getKodePosBiaya());
        lblPosBiaya.setValue(pb.getNamaPosBiaya());
        if (pb.getNamaTableItem().equalsIgnoreCase("barang")) {
            Barang brg = brgDAO.select(obj.getKodeItemBiayaBarang());
            ItemBiayaBarang itemBrg = kegiatanDAO.selectItemBiayaBarang(brg.getIdBarang());
            txtboxKodeItemBiayaOrIdHargaBarang.setValue(obj.getKodeItemBiayaBarang() + "");
            lblItemBiaya.setValue(brg.getNamaBarang());
            lblSatuan.setValue(itemBrg.getSatuan());
        } else if (pb.getNamaTableItem().equalsIgnoreCase("itemBiaya")) {
            ItemBiaya itemBiaya = itemDAO.select(obj.getKodeItemBiayaBarang());
            ItemBiayaHargaItem hargaItem = kegiatanDAO.selectHargaItem(sesi.getThnAnggaran(), itemBiaya.getKodeItem());
            lblSatuan.setValue(hargaItem.getSatuan());
            txtboxKodeItemBiayaOrIdHargaBarang.setValue(obj.getKodeItemBiayaBarang() + "");
            lblItemBiaya.setValue(itemBiaya.getNamaItem());
        }
        txtboxHarga.setValue(obj.getHarga());
        if (obj.getHarga() > 0) {
            txtboxHarga.setDisabled(true);
        } else {
            txtboxHarga.setDisabled(false);
        }

        txtboxKuantitas.setValue((int) obj.getKuantitas());
        txtboxJumlahHari.setValue((int) obj.getJumlahHari());
        double total = 0;
        if (obj.getJumlahHari() > 0) {
            total = obj.getHarga() * obj.getKuantitas() * obj.getJumlahHari();
        } else {
            total = obj.getHarga() * obj.getKuantitas();
        }
        lblTotalBiaya.setValue(ClassAntiNull.AntiNullDoubleCurrency(total));
        setDisableComponen(true);
    }

    private void setDisableComponen(boolean status) {
        btnCariPosBiaya.setDisabled(status);
        txtboxCariPosBiaya.setDisabled(status);
        btnCariJenis.setDisabled(status);
        txtboxCariJenis.setDisabled(status);
        btnCariItemBiaya.setDisabled(status);
        txtboxCariItemBiaya.setDisabled(status);
        txtboxKuantitas.setDisabled(status);
        txtboxJumlahHari.setDisabled(status);
    }
    private PosBiayaDAO posDAO = new PosBiayaDAOImpl();
    private BarangDAO brgDAO = new BarangDAOImpl();
    private ItemBiayaDAO itemDAO = new ItemBiayaDAOImpl();

    private void loadAnggaranBiayaRapaKerjaDanKegiatan() throws Exception {
        if (lstboxDaftarKegiatan.getSelectedItem() == null) {
            Messagebox.show("Silahakan Pilih Kegiatan", "Pesan Informasi", Messagebox.OK, Messagebox.INFORMATION);
            return;
        }
        lstboxDafarDetailKegiatan.getItems().clear();
        int id = 1;
        double jumlahAnggaran = 0;
        String isRevisi = "N";
        if (rdAwal.isChecked()) {
            isRevisi = "N";
        } else {
            isRevisi = "Y";
        }
        for (final AnggaranBiayaRapatKerjaDanKegiatan obj : kegiatanDAO.listAllAnggaranBiayaRapatKerjaDanKegiatan(Integer.valueOf(txtboxKodeRapatKerjaSubKegiatan.getValue()), isRevisi, sesi.getThnAnggaran())) {
            Listitem item = new Listitem();
            item.setValue(obj);
            PosBiaya pb = posDAO.select(obj.getKodePosBiaya());
            item.appendChild(new Listcell(pb.getNamaPosBiaya()));
            if (pb.getNamaTableItem().equalsIgnoreCase("barang")) {
                Barang brg = brgDAO.select(obj.getKodeItemBiayaBarang());
                item.appendChild(new Listcell(brg.getNamaBarang()));
            } else if (pb.getNamaTableItem().equalsIgnoreCase("itemBiaya")) {
                ItemBiaya itemBiaya = itemDAO.select(obj.getKodeItemBiayaBarang());
                item.appendChild(new Listcell(itemBiaya.getNamaItem()));
            }
            item.appendChild(new Listcell(obj.getHarga() + ""));
            item.appendChild(new Listcell(obj.getKuantitas() + ""));
            item.appendChild(new Listcell(obj.getJumlahHari() + ""));
            double total = 0;
            if (obj.getJumlahHari() > 0) {
                total = obj.getHarga() * obj.getKuantitas() * obj.getJumlahHari();
            } else {
                total = obj.getHarga() * obj.getKuantitas();
            }
            jumlahAnggaran += total;
            txtboxJumlahAnggaran.setValue(ClassAntiNull.AntiNullDoubleString(jumlahAnggaran));
            item.appendChild(new Listcell(total + ""));
            Listcell cellAksi = new Listcell();
            Toolbarbutton btnUbah = new Toolbarbutton();
            btnUbah.setLabel("[ubah]");
            btnUbah.setId("btnUbah" + String.valueOf(id));
            btnUbah.addEventListener("onClick", new EventListener() {

                public void onEvent(Event arg0) throws Exception {
                    txtboxAnggaranBiayaRapatKerjaDanKegiatan.setValue(obj.getId() + "");
                    txtboxKodePosBiaya.setValue(obj.getKodePosBiaya() + "");
                    PosBiaya pb = posDAO.select(obj.getKodePosBiaya());
                    lblPosBiaya.setValue(pb.getNamaPosBiaya());
                    if (pb.getNamaTableItem().equalsIgnoreCase("barang")) {
                        Barang brg = brgDAO.select(obj.getKodeItemBiayaBarang());
                        ItemBiayaBarang itemBrg = kegiatanDAO.selectItemBiayaBarang(brg.getIdBarang());
                        txtboxKodeItemBiayaOrIdHargaBarang.setValue(obj.getKodeItemBiayaBarang() + "");
                        lblItemBiaya.setValue(brg.getNamaBarang());
                        lblSatuan.setValue(itemBrg.getSatuan());
                    } else if (pb.getNamaTableItem().equalsIgnoreCase("itemBiaya")) {
                        ItemBiaya itemBiaya = itemDAO.select(obj.getKodeItemBiayaBarang());
                        ItemBiayaHargaItem hargaItem = kegiatanDAO.selectHargaItem(sesi.getThnAnggaran(), itemBiaya.getKodeItem());
                        lblSatuan.setValue(hargaItem.getSatuan());
                        txtboxKodeItemBiayaOrIdHargaBarang.setValue(obj.getKodeItemBiayaBarang() + "");
                        lblItemBiaya.setValue(itemBiaya.getNamaItem());
                    }
                    txtboxHarga.setValue(obj.getHarga());
                    if (obj.getHarga() > 0) {
                        txtboxHarga.setDisabled(true);
                    } else {
                        txtboxHarga.setDisabled(false);
                    }

                    txtboxKuantitas.setValue((int) obj.getKuantitas());
                    txtboxJumlahHari.setValue((int) obj.getJumlahHari());
                    double total = 0;
                    if (obj.getJumlahHari() > 0) {
                        total = obj.getHarga() * obj.getKuantitas() * obj.getJumlahHari();
                    } else {
                        total = obj.getHarga() * obj.getKuantitas();
                    }
                    lblTotalBiaya.setValue(ClassAntiNull.AntiNullDoubleCurrency(total));
                    setDisableComponen(false);
                    txtboxCariPosBiaya.setDisabled(true);
                    btnCariPosBiaya.setDisabled(true);
                    txtboxCariJenis.setDisabled(true);
                    btnCariJenis.setDisabled(true);
                    txtboxCariItemBiaya.setDisabled(true);
                    btnCariItemBiaya.setDisabled(true);
                }
            });
            final Toolbarbutton btnHapus = new Toolbarbutton();
            btnHapus.setLabel("[hapus]");
            btnHapus.setId("btnHapus" + String.valueOf(id));
            btnHapus.addEventListener("onClick", new EventListener() {

                public void onEvent(Event arg0) throws Exception {
                    if (Messagebox.show("Apakah data akan dihapus?", "Pesan Konfirmasi", Messagebox.YES | Messagebox.NO, null) == Messagebox.YES) {
                        try {
                            kegiatanDAO.delete(obj);
                            loadAnggaranBiayaRapaKerjaDanKegiatan();
                            loadAnggaranBiayaKegiatanAwal();
                            loadAnggaranBiayaKegiatanRevisi();
                        } catch (Exception ex) {
                            Messagebox.show("Gagal menghapus data: " + ex.getMessage(), "Pesan Kesalahan", Messagebox.YES, Messagebox.ERROR);
                        }

                        btnHapus.addForward(null, btnBatal, "onClick");
                    }
                    txtboxCariJenis.setDisabled(false);
                }
            });
//            if (rdAwal.isChecked()) {
//                isRevisi = "N";
//            } else {
//                isRevisi = "Y";
//            }
            if (kegiatanDAO.selectIsDikunci(sesi.getThnAnggaran(), sesi.getKodeUnit(), isRevisi).equalsIgnoreCase("Y")) {
                btnUbah.setDisabled(true);
                btnHapus.setDisabled(true);
            }

            id++;
            cellAksi.appendChild(btnUbah);
            cellAksi.appendChild(new Space());
            cellAksi.appendChild(btnHapus);
            item.appendChild(cellAksi);
            lstboxDafarDetailKegiatan.appendChild(item);
        }
    }

    public void btnKirimOnClick() throws Exception {
        kegiatanDAO.updateIsDiajukan(sesi.getThnAnggaran(), sesi.getKodeUnit());
        if (rdAwal.isChecked()) {
            if (kegiatanDAO.listKunciAnggaranBiayas(sesi.getThnAnggaran(), sesi.getKodeUnit(), 2, "N").size() <= 0) {
                kegiatanDAO.insertKunciAnggaranBiaya(sesi.getThnAnggaran(), sesi.getKodeUnit(), "N");
            } else {
                kegiatanDAO.updateKunciAnggaranBiaya(sesi.getThnAnggaran(), sesi.getKodeUnit(), "N");
            }
        } else if (rdRevisi.isChecked()) {
            if (kegiatanDAO.listKunciAnggaranBiayas(sesi.getThnAnggaran(), sesi.getKodeUnit(), 2, "Y").size() <= 0) {
                kegiatanDAO.insertKunciAnggaranBiaya(sesi.getThnAnggaran(), sesi.getKodeUnit(), "Y");
            } else {
                kegiatanDAO.updateKunciAnggaranBiaya(sesi.getThnAnggaran(), sesi.getKodeUnit(), "Y");
            }
        }

        setRadioStatus();
        txtboxTotalPlafon.setValue(ClassAntiNull.AntiNullDoubleCurrency(kegiatanDAO.getTotalPlafon(sesi.getKodeUnit(), sesi.getThnAnggaran())));
        setSisaPlafon();
        isDikunci();
        lstboxDafarDetailKegiatan.getItems().clear();


        lblKelompokKegiatan.setValue("......................");
        lblNamaKegiatan.setValue("......................");
        lblKeterangan.setValue("......................");
        lblJenisKegiatan.setValue("......................");
        lblNomorIndikator.setValue("......................");
        txtboxKodeRapatKerjaSubKegiatan.setValue("");
        txtboxKodePosBiaya.setValue("");
        txtboxKodeItemBiayaOrIdHargaBarang.setValue("");
        txtboxHarga.setValue(0);
        txtboxCariJenis.setValue("");
        txtboxIdJenisBarang.setValue("");
        txtboxCariItemBiaya.setValue("");
        lblItemBiaya.setValue("......................");
        lblTotalBiaya.setValue("......................");
        lblPosBiaya.setValue("......................");
        txtboxKuantitas.setValue(0);
        txtboxJumlahHari.setValue(0);
    //setRadioStatus();
    //txtboxTotalPlafon.setValue(ClassAntiNull.AntiNullDoubleCurrency(kegiatanDAO.getTotalPlafon(sesi.getKodeUnit(), sesi.getThnAnggaran())));
    //setSisaPlafon();
    //loadKegiatan();
    }
}
